package com.mikelouis.test.scala.proginscala.chapter2

/**
 * Created by yuazhu on 12/17/2014.
 */
object helloarg {
  def main(args: Array[String]) {
    // cala里，数组以零开始，通过在括号里指定索引访问一个元素。所以Scala里数组steps的第一个元素是steps(0)，不是像Java里的steps[0]
    println("Hello, " + args(0) + "!")

    // while if
    var j = 0
    while (j < args.length) {
      println(args(j))
      j += 1
    }

    println("*************while*****************")
    // second version while
    var i = 0
    while (i < args.length) {
      if (i != 0) {
        print(" ")
      }
      print(args(i))
      i += 1
    }
    println()

    println("*************foreach*****************")
    // 函数式编程
    println("函数式编程")
    args.foreach(arg => println(arg))
    // 显式指定数组的元素类型
    println("显式指定数组的元素类型")
    args.foreach((arg: String) => println(arg))
    // 如果函数文本由带一个参数的一句话组成，你都不需要显式命名和指定参数
    println("如果函数文本由带一个参数的一句话组成，你都不需要显式命名和指定参数")
    args.foreach(println)

    // 指令式语言
    println("指令式语言")
    for (arg <- args) println(arg)

    // return value of the function
    println(formatArgs(args))
    // assertion
    val res = formatArgs(Array("zero", "one", "two"))
    assert(res == "zero,one,two")
  }

  def formatArgs(args: Array[String]) = args.mkString(",")
}
